package fr.agileandco.tootle.client.vue;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

import fr.agileandco.tootle.client.Tootle;
import fr.agileandco.tootle.client.utilitaire.Popup;
import fr.agileandco.tootle.client.utilitaire.TailleDesEcrans;
import fr.agileandco.tootle.client.vue.composant.ListeDeTâches;

public class EcranDeCréationDUneListeDeTâches extends VerticalPanel {

	private ScrollPanel grilleDeLaListeDeTâches() {
		ScrollPanel scrollPanel = new ScrollPanel();
		scrollPanel.setPixelSize(TailleDesEcrans.LARGEUR_LISTE_TACHES,
				TailleDesEcrans.HAUTEUR_LISTE_TACHES);
		scrollPanel.add(grilleDeLaListeDeTâches);

		return scrollPanel;
	}

	private HorizontalPanel zoneDeValidation() {
		HorizontalPanel zoneDeValidation = new HorizontalPanel();
		zoneDeValidation.setSpacing(20);

		Button boutonEnregistrer = new Button("Enregistrer",
				new ClickHandler() {
					@Override
					public void onClick(ClickEvent event) {
						Tootle.service().enregistrer(
								grilleDeLaListeDeTâches.liste(),
								new AsyncCallback<Void>() {

									@Override
									public void onFailure(Throwable caught) {
										Popup.affiche("Erreur:" + caught.getMessage());
									}

									@Override
									public void onSuccess(Void result) {
										Popup.affiche("OK");
									}

								});
					}
				});

		Button boutonAnnuler = new Button("Annuler", new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				Tootle.afficherLAccueil();
			}
		});

		zoneDeValidation.add(boutonEnregistrer);
		zoneDeValidation.add(boutonAnnuler);

		return zoneDeValidation;
	}

	private HorizontalPanel zoneDuNomDeLaListeDeTâches() {
		HorizontalPanel zoneDuNomDeLaListeDeTâches = new HorizontalPanel();
		zoneDuNomDeLaListeDeTâches.setVerticalAlignment(ALIGN_MIDDLE);
		zoneDuNomDeLaListeDeTâches.setStyleName("zoneDuNomDeLaListeDeTâches");

		Label nom = new Label("Nom de la liste :");
		nom.setStyleName("nomDeLaListeDeTâches");
		zoneDuNomDeLaListeDeTâches.add(nom);

		TextBox zoneDeSaisieDuNom = new TextBox();
		zoneDeSaisieDuNom.setVisibleLength(50);
		zoneDuNomDeLaListeDeTâches.add(zoneDeSaisieDuNom);

		return zoneDuNomDeLaListeDeTâches;
	}

	public EcranDeCréationDUneListeDeTâches() {
		setPixelSize(TailleDesEcrans.LARGEUR_CREATION_LISTE,
				TailleDesEcrans.HAUTEUR_CREATION_LISTE);
		setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
		setStyleName("écranDeCréationDeLaListeDeTâches");

		add(zoneDuNomDeLaListeDeTâches());
		add(grilleDeLaListeDeTâches());
		add(zoneDeValidation());

		grilleDeLaListeDeTâches.initialiser();
	}

	private ListeDeTâches grilleDeLaListeDeTâches = new ListeDeTâches();
}
